using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance; // 单例模式，方便其他脚本调用

    public TextMeshProUGUI scoreText; // 显示分数的UI
    public TextMeshProUGUI stateText; // 显示游戏状态的UI
    private int totalScore;
    private int pacDotCount; // 剩余豆子数量
    private bool isPowerMode; // 是否处于能量豆模式

    void Awake() {
        // 确保全局只有一个GameManager
        if (Instance == null) Instance = this;
        else Destroy(gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        // 初始化：统计场景中所有豆子数量
        pacDotCount = FindObjectsOfType<PacDot>().Length;
        totalScore = 0;
        UpdateScoreText();
        stateText.text = "游戏开始！";
    }
    
    // 加分函数
    public void AddScore(int value) {
        totalScore += value;
        UpdateScoreText();
        // 检查是否收集完所有豆子（胜利条件）
        pacDotCount--;
        if (pacDotCount <= 0) {
            WinGame();
        }
    }
    
    // 激活能量豆模式（持续8秒）
    public void ActivatePowerMode() {
        isPowerMode = true;
        stateText.text = "能量豆生效！可以吃幽灵了！";
        // 通知所有幽灵切换为逃跑状态
        foreach (GhostAI ghost in FindObjectsOfType<GhostAI>()) {
            ghost.SetFleeMode(true);
        }
        // 8秒后结束能量模式
        Invoke(nameof(DeactivatePowerMode), 8f);
    }

    // 结束能量豆模式
    private void DeactivatePowerMode() {
        isPowerMode = false;
        stateText.text = "能量豆失效！";
        foreach (GhostAI ghost in FindObjectsOfType<GhostAI>()) {
            ghost.SetFleeMode(false);
        }
    }

    // 玩家碰到幽灵时调用
    public void OnPlayerHitGhost(GhostAI ghost) {
        if (isPowerMode) {
            // 能量模式：幽灵被吃掉
            ghost.Eaten();
            AddScore(200); // 吃幽灵加分
        } else {
            // 非能量模式：玩家失败
            LoseGame();
        }
    }

    private void WinGame() {
        stateText.text = "胜利！总分：" + totalScore;
        Time.timeScale = 0; // 暂停游戏
    }

    private void LoseGame() {
        stateText.text = "失败！再接再厉！";
        Time.timeScale = 0; // 暂停游戏
    }

    private void UpdateScoreText() {
        scoreText.text = "分数：" + totalScore;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
